// 跨标签页通信方案 ‘Msg’即通道名称，可以是任何你想叫的名称
let bol = new BroadcastChannel('Msg')
let handler = null

// 创建
export const createMsg = () => {
  bol = new BroadcastChannel('Msg')
}

export const sendMsg = (type, content) => {
  // 传入的内容必须是普通类型 象形式对象进行传输时请转换成普通类型
  bol.postMessage({
    type,
    content
  })
}
// 在监听获取方法内部我们需要多考虑一点关闭事件的方式，在空闲或者释放掉标签页面情况下不再执行监听
export const listenMsg = (callback) => {
  handler = (e) => {
    callback && callback(e.data)
  }
  bol.addEventListener('message', handler)
  // 在组件卸载之后将监听事件关闭
  return () => {
    bol.removeEventListener('message', handler)
    bol.close()
  }
}

// 取消
export const cancelMsg = () => {
  bol.removeEventListener('message', handler)
  bol.close()
}
